package vista;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import java.util.ListIterator;
import javax.swing.BorderFactory;


import javax.swing.ImageIcon;
import javax.swing.JButton;

import javax.swing.JLabel;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;


import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;


import javax.swing.table.AbstractTableModel;

import modelo.Coleccion;
import modelo.DetalleOrden;


/**
 * This code was edited or generated using CloudGarden's Jigloo
 * SWT/Swing GUI Builder, which is free for non-commercial
 * use. If Jigloo is being used commercially (ie, by a corporation,
 * company or business for any purpose whatever) then you
 * should purchase a license for each developer using Jigloo.
 * Please visit www.cloudgarden.com for details.
 * Use of Jigloo implies acceptance of these licensing terms.
 * A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
 * THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
 * LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
 */
public class VentanaConsultaProducto extends javax.swing.JFrame implements ActionListener{


	private JPanel jpanConsulta;
	private JTable jtblConsulta;
	private JButton jbtnCantidadDescentente;
	private JButton jbtnCantidadAscendente;
	private JButton jbtnDescendente;
	private JButton jbtnAscendente;
	private JButton jbtnImagen;
	private JButton jbtnSalir;
	private JScrollPane jScrollPaneConsulta;
	private JLabel jlbltitulo;
	Coleccion coleccion = new Coleccion();
	DetalleOrden detOrden = new DetalleOrden();
	private LinkedList<DetalleOrden> listaCantOrdenadas = new LinkedList<DetalleOrden>();
	private LinkedList<DetalleOrden> listaMontosOrdenados = new LinkedList<DetalleOrden>();

	/**
	 * Auto-generated main method to display this JFrame
	 */
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				VentanaConsultaProducto instConsulta = new VentanaConsultaProducto();
				instConsulta.setLocationRelativeTo(null);
				instConsulta.setVisible(true);
				instConsulta.addListener(instConsulta);
			}
		});
	}

	public VentanaConsultaProducto() {
		super();
		initGUI();
	}

	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			getContentPane().setBackground(new java.awt.Color(82,209,232));
			{
				jpanConsulta = new JPanel();
				getContentPane().add(jpanConsulta, "Center");
				jpanConsulta.setLayout(null);
				jpanConsulta.setBounds(12, 12, 813, 285);
				jpanConsulta.setBackground(new java.awt.Color(255,255,255));
				{
					jlbltitulo = new JLabel();
					jpanConsulta.add(jlbltitulo);
					jlbltitulo.setText("Consulta de Venta de Productos");
					jlbltitulo.setBounds(18, 40, 771, 28);
					jlbltitulo.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));
					jlbltitulo.setBackground(new java.awt.Color(82,209,232));
				}
				{
					jScrollPaneConsulta = new JScrollPane();
					jpanConsulta.add(jScrollPaneConsulta);
					jScrollPaneConsulta.setBounds(204, 85, 423, 170);
					{

						jtblConsulta = new JTable();
						jScrollPaneConsulta.setViewportView(jtblConsulta);
						jtblConsulta.setPreferredSize(new java.awt.Dimension(326, 168));

					}
				}
				{
					jbtnSalir = new JButton();
					jpanConsulta.add(jbtnSalir);
					jbtnSalir.setText("Salir");
					jbtnSalir.setBounds(669, 230, 103, 25);
					jbtnSalir.setBackground(new java.awt.Color(82,209,232));
					jbtnSalir.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));
				}
				{
					jbtnImagen = new JButton();
					jbtnImagen.setIcon(new ImageIcon(getClass().getClassLoader().getResource("imagen.jpg")));
					jpanConsulta.add(jbtnImagen);
					jbtnImagen.setBounds(18, 97, 180, 152);
					jbtnImagen.setBackground(new java.awt.Color(82,209,232));
					jbtnImagen.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));
				}
				{
					jbtnAscendente = new JButton();
					jpanConsulta.add(jbtnAscendente);
					jbtnAscendente.setText("Monto Ascendente");
					jbtnAscendente.setBounds(633, 157, 168, 22);
					jbtnAscendente.setBackground(new java.awt.Color(82,209,232));
					jbtnAscendente.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));
				}
				{
					jbtnDescendente = new JButton();
					jpanConsulta.add(jbtnDescendente);
					jbtnDescendente.setText("Monto Descendente");
					jbtnDescendente.setBounds(633, 191, 168, 22);
					jbtnDescendente.setBackground(new java.awt.Color(82,209,232));
					jbtnDescendente.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));
				}
				{
					jbtnCantidadAscendente = new JButton();
					jpanConsulta.add(jbtnCantidadAscendente);
					jbtnCantidadAscendente.setText("Cantidad Ascendente");
					jbtnCantidadAscendente.setBounds(634, 90, 168, 22);
					jbtnCantidadAscendente.setBackground(new java.awt.Color(82,209,232));
				}
				{
					jbtnCantidadDescentente = new JButton();
					jpanConsulta.add(jbtnCantidadDescentente);
					jbtnCantidadDescentente.setText("Cantidad Descendente");
					jbtnCantidadDescentente.setBounds(634, 123, 168, 22);
					jbtnCantidadDescentente.setBackground(new java.awt.Color(82,209,232));
				}
			}
			pack();
			this.setSize(847, 339);
		} catch (Exception e) {
			//add your error handling code here
			e.printStackTrace();
		}
	}

	public void addListener(ActionListener actionListener) {
		this.jbtnCantidadAscendente.addActionListener(actionListener);
		this.jbtnCantidadDescentente.addActionListener(actionListener);
		this.jbtnAscendente.addActionListener(actionListener);
		this.jbtnDescendente.addActionListener(actionListener);
		this.jbtnSalir.addActionListener(actionListener);
	}

	public void setResultados(AbstractTableModel abstractTableModel) {
		jtblConsulta.setModel(abstractTableModel);
	}

	public void actionPerformed (ActionEvent e)
	{
		//PATRON ITERATOR
		String seleccion = e.getActionCommand();
		//Para empesar se ordenan ambas listas (Por defecto estaran ordenadas ascendentemente)
		//porque las consultas se hacen order by monto o order by cantidadprod
		//tambien se pudo haber hecho con un Collections.sort(listas,new clase abstracta que ordena);
		if ("Salir".equals(seleccion))//item Salir
		{
			dispose();
		}
		else if ("Cantidad Ascendente".equals(seleccion))//item Ascendente
		{
			//Iteramos desde el primer registro de la lista que ya esta ascendetemente
			//conseguimos el iterador para recorrer la lista ascendentemente
			
			ListIterator ascendente = coleccion.miIteratorCantidad(0);
			listaCantOrdenadas.clear();
				while (ascendente.hasNext()) //recorremos la lista ascendentemente mientras existan elementos
				{
					detOrden = (DetalleOrden)ascendente.next();
					listaCantOrdenadas.add(detOrden);
				}
				setResultados(new VentanaTablaModeloProducto(listaCantOrdenadas));
		}
		else if ("Cantidad Descendente".equals(seleccion))//item descendente
		{
			//Iteramos desde el ultimo registro de la lista para
			//conseguir que el iterador recorra la lista descendentemente
			ListIterator descendente = coleccion.miIteratorCantidad(coleccion.getMilistacantidades().size());
			listaCantOrdenadas.clear();	
			while (descendente.hasPrevious()) //recorremos la lista descendentemente mientras existan elementos
				{
					detOrden = (DetalleOrden)descendente.previous();
					listaCantOrdenadas.add(detOrden);
				}
				setResultados(new VentanaTablaModeloProducto(listaCantOrdenadas));
		}
		else if ("Monto Ascendente".equals(seleccion))//item Ascendente
		{
			//Iteramos desde el primer registro de la lista que ya esta ascendetemente
			//conseguimos el iterador para recorrer la lista ascendentemente

			ListIterator ascendente = coleccion.miIteratorMonto(0);
			listaMontosOrdenados.clear();
			while (ascendente.hasNext()) //recorremos la lista ascendentemente mientras existan elementos
				{
					detOrden = (DetalleOrden)ascendente.next();
					listaMontosOrdenados.add(detOrden);
				}
				setResultados(new VentanaTablaModeloProducto(listaMontosOrdenados));
		}
		else if ("Monto Descendente".equals(seleccion))//item descendente
		{
			//Iteramos desde el ultimo registro de la lista para
			//conseguir que el iterador recorra la lista descendentemente
			ListIterator descendente = coleccion.miIteratorMonto(coleccion.getMilistamontos().size());
			listaMontosOrdenados.clear();
				while (descendente.hasPrevious()) //recorremos la lista descendentemente mientras existan elementos
				{
					detOrden = (DetalleOrden)descendente.previous();
					listaMontosOrdenados.add(detOrden);
				}
			    setResultados(new VentanaTablaModeloProducto(listaMontosOrdenados));
		}
	}//actionPerformed(ActionEvent)
}
